package model

import (
	"time"
)

// OAuthProvider 表示 OAuth 提供商类型
type OAuthProvider string

const (
	OAuthProviderGitHub OAuthProvider = "github"
	OAuthProviderGitee  OAuthProvider = "gitee"
)

// OAuthConfig 表示 OAuth 配置
type OAuthConfig struct {
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`
	RedirectURI  string `json:"redirect_uri"`
	AuthURL      string `json:"auth_url"`
	TokenURL     string `json:"token_url"`
	UserInfoURL  string `json:"user_info_url"`
}

// OAuthLoginRequest 表示 OAuth 登录请求
type OAuthLoginRequest struct {
	Provider OAuthProvider `json:"provider" binding:"required"`
	State    string        `json:"state,omitempty"`
	Code     string        `json:"code,omitempty"`
}

// OAuthCallbackRequest 表示 OAuth 回调请求
type OAuthCallbackRequest struct {
	Provider OAuthProvider `json:"provider" binding:"required"`
	Code     string        `json:"code" binding:"required"`
	State    string        `json:"state" binding:"required"`
}

// OAuthUserInfo 表示从 OAuth 提供商获取的用户信息
type OAuthUserInfo struct {
	Provider     OAuthProvider `json:"provider"`
	ProviderID   string        `json:"provider_id"`
	Email        string        `json:"email"`
	Name         string        `json:"name"`
	AvatarURL    string        `json:"avatar_url"`
	AccessToken  string        `json:"access_token"`
	RefreshToken string        `json:"refresh_token"`
	ExpiresAt    time.Time     `json:"expires_at"`
}

// OAuthLoginResponse 表示 OAuth 登录响应
type OAuthLoginResponseData struct {
	AuthURL string `json:"auth_url,omitempty"`
	Ticket  string `json:"ticket,omitempty"`
}

type OAuthLoginResponse struct {
	Response
	Data OAuthLoginResponseData `json:"data"`
}

// OAuthLinkRequest 表示 OAuth 账号绑定请求
type OAuthLinkRequest struct {
	Provider OAuthProvider `json:"provider" binding:"required"`
	Code     string        `json:"code" binding:"required"`
	State    string        `json:"state" binding:"required"`
}

// OAuthLinkResponse 表示 OAuth 账号绑定响应
type OAuthLinkResponse struct {
	Response
	Data struct {
		Linked bool `json:"linked"`
	} `json:"data"`
}

// OAuthUnlinkRequest 表示 OAuth 账号解绑请求
type OAuthUnlinkRequest struct {
	Provider OAuthProvider `json:"provider" binding:"required"`
}

// OAuthUnlinkResponse 表示 OAuth 账号解绑响应
type OAuthUnlinkResponse struct {
	Response
	Data struct {
		Unlinked bool `json:"unlinked"`
	} `json:"data"`
}

// OAuthProviderInfo 表示 OAuth 提供商信息
type OAuthProviderInfo struct {
	Provider OAuthProvider `json:"provider"`
	Name     string        `json:"name"`
	Enabled  bool          `json:"enabled"`
	Linked   bool          `json:"linked"`
	Email    string        `json:"email,omitempty"`
	UserName string        `json:"user_name,omitempty"`
}

// OAuthSetPrimaryEmailRequest 表示设置主邮件请求
type OAuthSetPrimaryEmailRequest struct {
	Provider OAuthProvider `json:"provider" binding:"required"`
}

// OAuthProvidersResponse 表示 OAuth 提供商列表响应
type OAuthProvidersResponse struct {
	Response
	Data []OAuthProviderInfo `json:"data"`
}
